amr_plan.f

Go to the documentation of this file.
00001 C:\opentelemac\v7p0\sources\telemac3d\amr_plan.f
00002 !
00077                           SUBROUTINE AMR_PLAN
00078 !                         *******************
00079 !
00080      &(ZVALS,OBJSOL,REFTYPE,NPOIN2,NPLAN,NSEG2,GLOSEG,DIMGLO,
00081      & Z0,NEWZ,ZEXT,INTSOL,MONITOR,SSMONITOR,SMONITOR,NEXTR,SNNEIGH,
00082      & NNEIGH,MCOEFF,MESH2D,MESH3D)
00083 !
00084 !***********************************************************************
00085 ! TELEMAC3D   V6P2                                   25/05/2011
00086 !***********************************************************************
00087 !
00088 !
00089 !
00090 !
00091 !
00092 !
00093 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00094 !| DIMGLO         |-->| FIRST DIMENSION OF GLOSEG
00095 !| GLOSEG         |-->| EDGE ADJACENCY ARRAY
00096 !| INTSOL         |<->| OBJECTIVE VARIABLE INTERPOLATED ON NEW LAYERS
00097 !|                |   | (WORK ARRAY)
00098 !| MCOEFF         |<->| LOCAL MONITOR FUNCTION COEFFICIENT (WORK ARRAY)
00099 !| MESH2D         |<->| MESH STRUCTURE OF 2D MESH
00100 !| MESH3D         |<->| MESH STRUCTURE OF 3D MESH
00101 !| MONITOR        |<->| MONITOR FUNCTION (WORK ARRAY)
00102 !| NEWZ           |<->| REVISED VERTICAL LAYER POSITIONS
00103 !| NEXTR          |<->| NUMBER OF EXTREMA IN WATER COLUMN (WORK ARRAY)
00104 !| NNEIGH         |<->| NUMBER OF NEIGHBOURS OF POINT IN 2D (WORK ARRAY)
00105 !| NPLAN          |-->| NUMBER OF PLANES
00106 !| NPOIN2         |-->| NUMBER OF NODES IN 2D
00107 !| NSEG2          |-->| NUMBER OF EDGES IN 2D
00108 !| OBJSOL         |-->| OBJECTIVE VARIABLE TO BE USED FOR MESH REFINEMENT
00109 !| REFTYPE        |-->| TYPE OF MONITOR FUNCTION
00110 !|                |   | (A=ARCLENGTH, C=CURVATURE)
00111 !| SMONITOR       |<->| SMOOTHED MONITOR FUNCTION (WORK ARRAY)
00112 !| SNNEIGH        |<->| STRUCTURE OF NNEIGH
00113 !| SSMONITOR      |<->| STRUCTURE OF SMONITOR
00114 !| Z0             |<->| ORIGINAL LAYER POSITIONS (WORK ARRAY)
00115 !| ZEXT           |<->| POSITITIONS OF EXTREMA (WORK ARRAY)
00116 !| ZVALS          |<->| VERTICAL LAYER POSITIONS
00117 !|                |   | ON OUTPUT, ADAPTED LAYER POSITIONS
00118 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00119 !
00120       USE BIEF
00121 !
00122       IMPLICIT NONE
00123       INTEGER LNG,LU
00124       COMMON/INFO/LNG,LU
00125 !
00126 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00127 !
00128       INTEGER,          INTENT(IN)    :: NPLAN,NPOIN2,NSEG2,DIMGLO
00129       DOUBLE PRECISION, INTENT(IN)    :: OBJSOL(NPOIN2,NPLAN)
00130       CHARACTER,        INTENT(IN)    :: REFTYPE
00131       INTEGER,          INTENT(IN)    :: GLOSEG(DIMGLO,2)
00132       DOUBLE PRECISION, INTENT(INOUT) :: ZVALS(NPOIN2,NPLAN)
00133       DOUBLE PRECISION, INTENT(INOUT) :: Z0(NPOIN2,NPLAN)
00134       DOUBLE PRECISION, INTENT(INOUT) :: NEWZ(NPOIN2,NPLAN)
00135       DOUBLE PRECISION, INTENT(INOUT) :: ZEXT(NPOIN2,NPLAN)
00136       DOUBLE PRECISION, INTENT(INOUT) :: INTSOL(NPOIN2,NPLAN)
00137       DOUBLE PRECISION, INTENT(INOUT) :: MONITOR(NPOIN2,NPLAN)
00138       DOUBLE PRECISION, INTENT(INOUT) :: SMONITOR(NPOIN2,NPLAN)
00139       INTEGER,          INTENT(INOUT) :: NEXTR(NPOIN2)
00140       DOUBLE PRECISION, INTENT(INOUT) :: NNEIGH(NPOIN2),MCOEFF(NPOIN2)
00141       TYPE(BIEF_OBJ),   INTENT(INOUT) :: SNNEIGH,SSMONITOR
00142       TYPE(BIEF_MESH),  INTENT(INOUT) :: MESH2D,MESH3D
00143 !
00144 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00145 !
00146       INTEGER          :: IPOIN,IPLAN,JPLAN,P1,P2,ISEG,IEXTR,ITERS,LASTJ
00147       DOUBLE PRECISION :: DSDZ,MINDIST,ZL,ZR,SL,SR
00148       DOUBLE PRECISION, POINTER :: COEF(:)
00149 !
00150 ! -----------------------------
00151 !     HARD-CODED PARAMETERS
00152 ! -----------------------------
00153 !
00154       DOUBLE PRECISION :: RR = 0.5D0 ! RELAXATION PARAMETER
00155       DOUBLE PRECISION :: S1,S2,S3   ! TEMPORARY VARIABLES
00156       INTEGER          :: MAX_ITERATIONS = 10
00157 !
00158 !-----------------------------------------------------------------------
00159 !
00160 !     GIVING A CORRECT STRUCTURE TO WORK ARRAYS
00161 !
00162       CALL CPSTVC(MESH2D%X,SNNEIGH)
00163       CALL CPSTVC(MESH3D%X,SSMONITOR)
00164 !
00165 !     PREPARING AN EDGE-BASED COEFFICIENT = 0.5 ON INTERFACE SEGMENTS
00166 !                                     AND = 1.  ELSEWHERE
00167 !
00168       IF(NCSIZE.GT.1) THEN
00169 !       MEMORY SPACE TAKEN IN MESH2D EDGE-BASED WORK MATRIX
00170         COEF=>MESH2D%MSEG%X%R(1:NSEG2)
00171         DO ISEG=1,NSEG2
00172           COEF(ISEG)=1.D0
00173         ENDDO
00174         CALL MULT_INTERFACE_SEG(COEF,MESH2D%NH_COM_SEG%I,
00175      &                          MESH2D%NH_COM_SEG%DIM1,
00176      &                          MESH2D%NB_NEIGHB_SEG,
00177      &                          MESH2D%NB_NEIGHB_PT_SEG%I,0.5D0,NSEG2)
00178       ENDIF
00179 !
00180 ! --------------------------------------------------------------------
00181 ! COPY ZVALS TO Z0, OBJSOL TO INTSOL, AND ZVALS TO NEWZ
00182 ! --------------------------------------------------------------------
00183 !
00184       DO IPLAN = 1,NPLAN
00185         DO IPOIN = 1,NPOIN2
00186           Z0(IPOIN,IPLAN)     = ZVALS(IPOIN,IPLAN)
00187           NEWZ(IPOIN,IPLAN)   = ZVALS(IPOIN,IPLAN)
00188           INTSOL(IPOIN,IPLAN) = OBJSOL(IPOIN,IPLAN)
00189         ENDDO                 ! IPOIN = 1,NPOIN2
00190       ENDDO                    ! IPLAN = 1,NPLAN
00191 !
00192 ! --------------------------------------------------------------------
00193 ! FIND ANY LOCAL EXTREMA, AND RECORD THEIR LOCATIONS
00194 ! --------------------------------------------------------------------
00195 !
00196       DO IPOIN = 1,NPOIN2
00197         NEXTR(IPOIN) = 0
00198         DO IPLAN = 2,NPLAN-1
00199           S1 = OBJSOL(IPOIN,IPLAN-1)
00200           S2 = OBJSOL(IPOIN,IPLAN)
00201           S3 = OBJSOL(IPOIN,IPLAN+1)
00202           IF((S1.LT.S2.AND.S3.LT.S2) .OR.
00203      &       (S1.GT.S2.AND.S3.GT.S2) ) THEN
00204             NEXTR(IPOIN) = NEXTR(IPOIN) + 1
00205             ZEXT(IPOIN,NEXTR(IPOIN)) = Z0(IPOIN,IPLAN)
00206           ENDIF              ! LOCAL EXTREMUM FOUND
00207         ENDDO                 ! IPLAN = 2,NPLAN-1
00208       ENDDO                    ! IPOIN = 1,NPOIN2
00209 !
00210 ! --------------------------------------------------------------------
00211 ! FIND MONITOR COEFFICIENT (DEPENDS ON TYPE OF REFINEMENT)
00212 ! ARC LENGTH: MCOEFF = 100/MAX|DSDZ^2|
00213 ! CURVATURE : MCOEFF =  10/MAX|CURVATURE^2|
00214 !
00215 ! NOW COMPUTES LOCAL COEFFCIENT BASED ON LOCAL WATER COLUMN
00216 ! --------------------------------------------------------------------
00217 !
00218       IF(REFTYPE .EQ. 'A') THEN    ! REFINE BASED ON ARC LENGTH
00219         DO IPOIN = 1,NPOIN2
00220           MCOEFF(IPOIN) = 0.D0
00221           DO IPLAN = 1,NPLAN-1
00222             DSDZ = (OBJSOL(IPOIN,IPLAN+1)-OBJSOL(IPOIN,IPLAN)) /
00223      &             (ZVALS(IPOIN,IPLAN+1)-ZVALS(IPOIN,IPLAN))
00224             IF(ABS(DSDZ).GT.MCOEFF(IPOIN)) THEN
00225               MCOEFF(IPOIN) = ABS(DSDZ)
00226             ENDIF
00227           ENDDO              ! IPLAN = 1,NPLAN-1
00228           IF( MCOEFF(IPOIN).GT.(0.01) ) THEN
00229             MCOEFF(IPOIN) = 100.D0/(MCOEFF(IPOIN)**2)
00230           ENDIF
00231         ENDDO                 ! IPOIN = 1,NPOIN2
00232       ELSEIF (REFTYPE .EQ. 'C') THEN
00233         WRITE(LU,*) 
00234 'AMR_PLAN: CURVATURE-BASED REFINEMENT NOT     &               YET IMPLEMENTED'
00235         CALL PLANTE(1)
00236         STOP
00237       ELSE
00238         WRITE(LU,*) 'AMR_PLAN: UNKNOWN REFINEMENT TYPE: ',REFTYPE
00239         CALL PLANTE(1)
00240         STOP
00241       ENDIF                    ! CASE SPLITTING ON REFINEMENT TYPE
00242 !
00243 ! --------------------------------------------------------------------
00244 ! BEGIN ITERATIVE LOOP TO SOLVE (WZ')' = 0
00245 ! WITH MONITOR FUNCTION W = SQRT(1+MCOEFF*DSDX^2)         (ARC LENGTH)
00246 !                   OR  W = SQRT(1+MCOEFF*CURVATURE^2)    (CURVATURE)
00247 ! --------------------------------------------------------------------
00248 !
00249       DO ITERS=1,MAX_ITERATIONS
00250 !
00251 !       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00252 !       1. FIND MONITOR FUNCTION W(I,J) = W(Z(I,J+1/2))
00253 !          BASED ON INTERPOLATED SOLUTION
00254 !       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00255 !
00256         IF(REFTYPE.EQ.'A') THEN ! ARC LENGTH
00257           DO IPOIN = 1,NPOIN2
00258             DO IPLAN = 1,NPLAN-1
00259               DSDZ = (INTSOL(IPOIN,IPLAN+1)-INTSOL(IPOIN,IPLAN)) /
00260      &               (ZVALS(IPOIN,IPLAN+1)-ZVALS(IPOIN,IPLAN))
00261               MONITOR(IPOIN,IPLAN)=SQRT(1.D0+MCOEFF(IPOIN)*DSDZ**2)
00262             ENDDO
00263           ENDDO
00264         ELSEIF (REFTYPE.EQ.'C') THEN
00265           WRITE(LU,*) 
00266 'AMR_PLAN: CURVATURE-BASED REFINEMENT NOT     &                         YET IMPLEMENTED'
00267           CALL PLANTE(1)
00268           STOP
00269         ELSE
00270           WRITE(LU,*) 'AMR_PLAN: UNKNOWN REFINEMENT TYPE: ',
00271      &                         REFTYPE
00272           CALL PLANTE(1)
00273           STOP
00274         ENDIF
00275 !
00276 !      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00277 !      2. SMOOTH MONITOR FUNCTION USING A LOW-PASS FILTER
00278 !         FIRST IN VERTICAL, THEN IN HORIZONTAL.
00279 !         (OR JUST BY LOOPING THROUGH EDGES?)
00280 !      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00281 !
00282 !        < VERTICAL SMOOTHING >
00283 !
00284         DO IPOIN = 1,NPOIN2
00285           DO IPLAN = 2,NPLAN-2
00286             SMONITOR(IPOIN,IPLAN) = 0.25*(MONITOR(IPOIN,IPLAN-1) +
00287      &                                  2*MONITOR(IPOIN,IPLAN  ) +
00288      &                                    MONITOR(IPOIN,IPLAN+1))
00289           ENDDO              ! IPLAN = 2,NPLAN-2
00290         ENDDO                 ! IPOIN = 1,NPOIN2
00291         DO IPOIN = 1,NPOIN2
00292           DO IPLAN = 2,NPLAN-2
00293             MONITOR(IPOIN,IPLAN) = SMONITOR(IPOIN,IPLAN)
00294           ENDDO              ! IPLAN = 2,NPLAN-2
00295         ENDDO                 ! IPOIN = 1,NPOIN2
00296 !
00297 !       < HORIZONTAL SMOOTHING >
00298 !
00299         DO JPLAN = 1,20  ! 20 ITERATIONS
00300 !
00301         DO IPOIN = 1,NPOIN2
00302           NNEIGH(IPOIN) = 0.D0
00303           DO IPLAN = 1,NPLAN
00304             SMONITOR(IPOIN,IPLAN) = 0.D0
00305           ENDDO
00306         ENDDO
00307 !
00308 !       LOOP THROUGH SEGMENTS IN 2D MESH TO FIND NEIGHBOURS
00309 !       AND COMPUTE A WEIGHTED MEAN OF THE MONITOR FUNCTION ON EACH NODE
00310 !
00311         IF(NCSIZE.GT.1) THEN
00312           DO ISEG = 1,NSEG2
00313             P1 = GLOSEG(ISEG,1)
00314             P2 = GLOSEG(ISEG,2)
00315 !           A SEGMENT MAY APPEAR TWICE IN PARALLEL, HENCE COEF
00316             NNEIGH(P1) = NNEIGH(P1)+COEF(ISEG)
00317             NNEIGH(P2) = NNEIGH(P2)+COEF(ISEG)
00318             DO IPLAN = 1,NPLAN
00319               SMONITOR(P1,IPLAN) = SMONITOR(P1,IPLAN)
00320      &                           + COEF(ISEG)*MONITOR(P2,IPLAN)
00321               SMONITOR(P2,IPLAN) = SMONITOR(P2,IPLAN)
00322      &                           + COEF(ISEG)*MONITOR(P1,IPLAN)
00323             ENDDO
00324           ENDDO
00325 !         THE POINT ITSELF (MAY APPEAR SEVERAL TIMES IN PARALLEL, HENCE FAC)
00326           DO IPOIN = 1,NPOIN2
00327             NNEIGH(IPOIN)=NNEIGH(IPOIN)+MESH2D%FAC%R(IPOIN)
00328             DO IPLAN = 1,NPLAN
00329               SMONITOR(IPOIN,IPLAN)=SMONITOR(IPOIN,IPLAN)
00330      &        + MONITOR(IPOIN,IPLAN)*MESH2D%FAC%R(IPOIN)
00331             ENDDO
00332           ENDDO
00333 !         PARALLEL GATHERING AT INTERFACE NODES
00334           CALL PARCOM(SNNEIGH  ,2,MESH2D)
00335           CALL PARCOM(SSMONITOR,2,MESH3D)
00336         ELSE
00337           DO ISEG = 1,NSEG2
00338             P1 = GLOSEG(ISEG,1)
00339             P2 = GLOSEG(ISEG,2)
00340             NNEIGH(P1) = NNEIGH(P1)+1.D0
00341             NNEIGH(P2) = NNEIGH(P2)+1.D0
00342             DO IPLAN = 1,NPLAN-1
00343               SMONITOR(P1,IPLAN) = SMONITOR(P1,IPLAN)+MONITOR(P2,IPLAN)
00344               SMONITOR(P2,IPLAN) = SMONITOR(P2,IPLAN)+MONITOR(P1,IPLAN)
00345             ENDDO              ! IPLAN = 1,NPLAN-1
00346           ENDDO                ! ISEG = 1,NSEG2
00347 !         THE POINT ITSELF
00348           DO IPOIN = 1,NPOIN2
00349             NNEIGH(IPOIN)=NNEIGH(IPOIN)+1.D0
00350             DO IPLAN = 1,NPLAN
00351               SMONITOR(IPOIN,IPLAN)=SMONITOR(IPOIN,IPLAN)
00352      &                             + MONITOR(IPOIN,IPLAN)
00353             ENDDO
00354           ENDDO
00355         ENDIF
00356 !
00357 !       FINAL AVERAGING
00358 !
00359         DO IPOIN = 1,NPOIN2
00360           DO IPLAN = 2,NPLAN-2
00361             MONITOR(IPOIN,IPLAN)=SMONITOR(IPOIN,IPLAN)/NNEIGH(IPOIN)
00362           ENDDO
00363         ENDDO
00364 !
00365         ENDDO  ! JPLAN = 1,20 (20 ITERATION OF HORIZONTAL SMOOTHING)
00366 !
00367 !      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00368 !      3. FIND NEW POINT LOCATIONS USING A SINGLE STEP
00369 !         OF A GAUSS-SIEDEL TYPE METHOD
00370 !      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00371 !
00372         DO IPOIN = 1,NPOIN2
00373           DO IPLAN = 2,NPLAN-1
00374             NEWZ(IPOIN,IPLAN) = (1.D0-RR)*ZVALS(IPOIN,IPLAN) +
00375      &        RR*( MONITOR(IPOIN,IPLAN  )*ZVALS(IPOIN,IPLAN+1) +
00376      &             MONITOR(IPOIN,IPLAN-1)*ZVALS(IPOIN,IPLAN-1) ) /
00377      &            (MONITOR(IPOIN,IPLAN)+MONITOR(IPOIN,IPLAN-1))
00378           ENDDO              ! IPLAN = 2,NPLAN-1
00379         ENDDO                 ! IPOIN = 1,NPOIN2
00380 !
00381 !      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00382 !      4. FOR EACH EXTREMUM, MOVE NEAREST NEW MESH POINT
00383 !         TO COINCIDE WITH LOCATION OF EXTREMUM
00384 !      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00385 !
00386         DO IPOIN = 1,NPOIN2
00387           DO IEXTR = 1,NEXTR(IPOIN)
00388             MINDIST = 1.E10
00389             JPLAN = 0
00390             DO IPLAN = 2,NPLAN-1
00391               IF( ABS(NEWZ(IPOIN,IPLAN)-ZEXT(IPOIN,IEXTR))
00392      &                                     .LT. MINDIST ) THEN
00393                 MINDIST = ABS(NEWZ(IPOIN,IPLAN)-ZEXT(IPOIN,IEXTR))
00394                 JPLAN = IPLAN
00395               ENDIF        ! POINT IPLAN IS NEAREST YET TO EXTREMUM
00396             ENDDO           ! IPLAN = 2,NPLAN-1
00397             NEWZ(IPOIN,JPLAN) = ZEXT(IPOIN,IEXTR)
00398           ENDDO              ! IEXTR = 1,NEXTR(IPOIN)
00399         ENDDO                 ! IPOIN = 1,NPOIN2
00400 !
00401 !      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00402 !      5. INTERPOLATE ORIGINAL SOLUTION AT NEW MESH POINTS
00403 !      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00404 !
00405         DO IPOIN = 1,NPOIN2
00406 !
00407           LASTJ=1
00408           DO IPLAN = 1,NPLAN
00409 !
00410 !           ------------------------------
00411 !           FIND INTERVAL CONTAINING POINT
00412 !           ------------------------------
00413 !
00414             DO JPLAN = LASTJ,NPLAN-1
00415               ZL = Z0(IPOIN,JPLAN)
00416               ZR = Z0(IPOIN,JPLAN+1)
00417               IF(ZL.LE.NEWZ(IPOIN,IPLAN).AND.
00418      &           NEWZ(IPOIN,IPLAN).LE.ZR) THEN
00419                 SL = OBJSOL(IPOIN,JPLAN)
00420                 SR = OBJSOL(IPOIN,JPLAN+1)
00421                 DSDZ = (SR-SL)/(ZR-ZL)
00422                 INTSOL(IPOIN,IPLAN) = SL + DSDZ*(NEWZ(IPOIN,IPLAN)-ZL)
00423                 GO TO 1000
00424               ENDIF           ! INTERVAL FOUND
00425             ENDDO             ! JPLAN = 1,NPLAN
00426 !           POINT NOT LOCATED
00427             WRITE(LU,*) 'AMR_PLAN: POINT OUTSIDE INTERVAL: ',
00428      &                  NEWZ(IPOIN,IPLAN)
00429             CALL PLANTE(1)
00430             STOP
00431 1000        CONTINUE
00432             LASTJ=JPLAN
00433           ENDDO               ! IPLAN = 1,NPLAN
00434 !
00435         ENDDO               ! IPOIN = 1,NPOIN2
00436 !
00437 !      ~~~~~~~~~~~~~~~~~~~
00438 !      6. SET ZVALS = NEWZ
00439 !      ~~~~~~~~~~~~~~~~~~~
00440 !
00441         DO IPOIN = 1,NPOIN2
00442           DO IPLAN = 1,NPLAN
00443             ZVALS(IPOIN,IPLAN) = NEWZ(IPOIN,IPLAN)
00444           ENDDO              ! IPLAN = 1,NPLAN
00445         ENDDO                ! IPOIN = 1,NPOIN2
00446 !
00447 !-----------------------------------------------------------------------
00448 !
00449       ENDDO ! MAIN SUBITERATION LOOP
00450 !
00451 !-----------------------------------------------------------------------
00452 !
00453 ! ZVALS NOW CONTAINS THE NEW LAYER POSITIONS
00454 ! INTSOL CONTAINS AN INTERPOLATION OF THE ORIGINAL SOLUTION
00455 ! ON THE NEW MESH POINTS (NOT NEEDED BY TELEMAC)
00456 !
00457 !-----------------------------------------------------------------------
00458 !
00459       RETURN
00460       END

Generated on Fri Aug 31 2013 18:12:58 by S.E.Bourban (HRW) using doxygen 1.7.0