SUBROUTINE USRMBC (VAL,NODE,TIME,SOL,NUMEQA,NDOF,NUMNP,LDOFU, 1 CONSTR,NODEPR,XYZ,iflag,ierr) c c Purpose: c This routine decides whether a given point (x,y,z) c is affected by the moving body constraint. c c Input: c node - internal node number c time - value of time counter c XYZ - nodal position c NODEPR - reverse permutation array c nodext = NODEPR(NODE) c c Output: c VAL - array imposed values for dofs c iflag() - array of flags for dofs, c 0 if not affected, 1 if affected c #include "IMPLCT.COM" #include "PARUSR.COM" DIMENSION SOL(*),NUMEQA(NUMNP,NDOF),LDOFU(*),XYZ(NUMNP,*) DIMENSION IFLAG(*),VAL(*),NODEPR(*),CONSTR(*) F_DOUBLEPRECISION GETSOL F_DOUBLEPRECISION GETSOLP ZRO = 0.D0 C C RETRIEVE NODAL COORDINATES: C X = XYZ(NODE,1) Y = XYZ(NODE,2) C C INITIAL CALCULATIONS: C VV = SQRT(X**2+Y**2) IF (VV .LT. 1.0D-8) RETURN XV = X / VV YV = Y / VV C THICK = 0.02D0 OMEGA = 1.047D0 ANGLE = OMEGA * TIME PI = 3.14159265359D0 C C LOOP OVER THE FOUR BLADES: C DO 10 I=1,4 C XANG = COS(ANGLE+FLOAT(I-1)*PI/2.0D0) YANG = SIN(ANGLE+FLOAT(I-1)*PI/2.0D0) DIST = SQRT( (XV-XANG)**2 + (YV-YANG)**2 ) * VV C C IF THE NODE COINCIDES WITH THE BLADE: C IF (DIST .LT. THICK) THEN C C SET FLAGS AND VALUES FOR THE TWO C VELOCITY COMPONENTS: C IFLAG(KDU) = 1 IFLAG(KDV) = 1 C VAL(KDU) = - OMEGA * Y VAL(KDV) = OMEGA * X C ENDIF C 10 CONTINUE C RETURN END C