[updated 2.Jun.1998]

Librairie sdexplo > Fichier rploca.f

Qui appelle rploca ?

line
      SUBROUTINE RPLOCA (NDIM,NDMDOM,NCPINC,NBNE,NORMAL,LOCREP)
line
  Auteur : D.Martin (Mai 1997) 
  Derniere modification : D.Martin (29 Mai 1998)
   
  Creation des reperes locaux sur un domaine, par completion en une base
  orthornormee du vecteur normal unitaire
   
 -- Arguments --
  NDIM   dimension d'espace
  NDMDOM dimension du domaine
  NCPINC nombre de composantes pour l'inconnue
  NBNE   nombre de noeuds
  NORMAL tableau des normales
  LOCREP tableau des reperes locaux resultat
line
      INTEGER   NDIM,NCPINC,NDMDOM,NBNE
      REAL      NORMAL(NDIM,*),LOCREP(NCPINC,NCPINC,*)
 
      INTEGER   NE,I,J
      REAL      N1,N2,N3,RN1,RN2,RN3,RMAX,RNORM
line
      IF (NDIM.EQ.2) THEN
         IF (NDMDOM.EQ.1) THEN
            DO 20 NE=1,NBNE
               Vecteur normal = n
               N1=NORMAL(1,NE)
               N2=NORMAL(2,NE)
               LOCREP(1,1,NE)=N1 
               LOCREP(2,1,NE)=N2 
               Vecteur tangent t avec det(n,t) = +1
               LOCREP(1,2,NE)=-N2 
               LOCREP(2,2,NE)=+N1 
20          CONTINUE
         ELSE
            DO 22 NE=1,NBNE
               LOCREP(1,1,NE)=1.
               LOCREP(2,1,NE)=0.
               LOCREP(1,2,NE)=0.
               LOCREP(2,2,NE)=1.
22          CONTINUE
         ENDIF
         IF (NCPINC.GT.NDIM) THEN
            Pour une inconnue a 3 composantes en 2D (alteration provisoire)
            DO 29 NE=1,NBNE
               LOCREP(3,1,NE)=0.
               LOCREP(3,2,NE)=0.
               LOCREP(1,3,NE)=0.
               LOCREP(2,3,NE)=0.
               LOCREP(3,3,NE)=1.
29         CONTINUE
         ENDIF
      ELSEIF (NDIM.EQ.3) THEN
         IF (NDMDOM.EQ.2) THEN
            DO 30 NE=1,NBNE
               Vecteur normal: n
               N1=NORMAL(1,NE)
               N2=NORMAL(2,NE)
               N3=NORMAL(3,NE)
               LOCREP(1,1,NE)=N1 
               LOCREP(2,1,NE)=N2 
               LOCREP(3,1,NE)=N3 
               premier vecteur tangent: t1
               RN1=1.-N1*N1
               RN2=1.-N2*N2
               RN3=1.-N3*N3
               RMAX=MAX (RN1,RN2,RN3)
               RNORM=SQRT(RMAX)
               IF (RMAX.EQ.RN1) THEN
                  LOCREP(1,2,NE)= 0.
                  LOCREP(2,2,NE)= N3/RNORM
                  LOCREP(3,2,NE)=-N2/RNORM
               ELSEIF (RMAX.EQ.RN2) THEN
                  LOCREP(1,2,NE)= N3/RNORM
                  LOCREP(2,2,NE)= 0.
                  LOCREP(3,2,NE)=-N1/RNORM
               ELSEIF (RMAX.EQ.RN3) THEN
                  LOCREP(1,2,NE)= N2/RNORM
                  LOCREP(2,2,NE)=-N1/RNORM
                  LOCREP(3,2,NE)= 0.
               ENDIF
               second vecteur tangent: t2 avec det (n,t1,t2)=+1
               CALL PROEXT (NDIM,LOCREP(1,1,NE),LOCREP(1,3,NE))         !utilite
30          CONTINUE
         ELSEIF (NDMDOM.EQ.0) THEN
            DO 35 NE=1,NBNE
               DO 34 I=1,NDIM
                  DO 33 J=1,NDIM
                     LOCREP(I,J,NE)=0.
33                CONTINUE
               LOCREP(I,I,NE)=1.
34             CONTINUE
35          CONTINUE
         ENDIF
      ENDIF
                                                                    END !RpLoca
line
top

rploca est appelé dans

top