C MPADV SOURCE CB215821 16/04/21 21:17:50 8920 SUBROUTINE mpADV(wkplus, wkmin, ML, MR, & Mkplus, Mkmin, Pkplus, Pkmin) C*********************************************************************** C NOM : mpADV C DESCRIPTION : C C C C LANGAGE : ESOPE C AUTEUR : José R. Garcia Cascales (CEA/DEN/DM2S/SFME/LTMF) C mél : fd1@semt2.smts.cea.fr C*********************************************************************** C APPELES : C APPELES (E/S) : C INPUTS: ML, MR C OUTPUTS: MPLUS, MMINUS, PPLUS, PMINUS C APPELES (BLAS) : C APPELES (CALCUL) : C APPELE PAR : C*********************************************************************** C SYNTAXE GIBIANE : C ENTREES : C ENTREES/SORTIES : C SORTIES : C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 19/02/2001, version initiale C HISTORIQUE : v1, ??/??/2001, création C HISTORIQUE : C HISTORIQUE : C*********************************************************************** C Prière de PRENDRE LE TEMP de compléter les commentaires C en cas de modification de ce sous-programme afin de faciliter C la maintenance ! C*********************************************************************** * * * Executable statements * real*8 wkplus, wkmin, ML, MR, Mkplus, Mkmin, Pkplus, Pkmin real*8 MPLUS, MMIN, PPLUS, PMIN, & MPLUS2, MMIN2, & A_AUSM, B_AUSM parameter(A_AUSM = 0.1875D0) parameter(B_AUSM = 0.125D0) C Calculation of MPLUS and PPLUS if(ABS(ML) .GE. 1.D0) then MPLUS2 = 0.5D0*(ML + ABS(ML)) else MPLUS2 = 0.25D0*(ML + 1.D0)**2 end if if(ABS(ML) .GE. 1.D0) then MMIN2 = 0.5D0*(ML - ABS(ML)) else MMIN2 = -0.25D0*(ML - 1.D0)**2 end if if(ABS(ML) .GE. 1) then MPLUS = 0.5D0*(ML + ABS(ML)) else MPLUS = MPLUS2*(1.D0 - B_AUSM*16.D0*MMIN2) end if if (ABS(ML) .GE. 1) then PPLUS = (0.5D0*(ML + ABS(ML)))/ML else PPLUS = MPLUS2*(2.D0 - ML - A_AUSM*16.D0*ML*MMIN2) end if C Calculation of MMIN if(ABS(MR) .GE. 1.D0) then MPLUS2 = 0.5D0*(MR + ABS(MR)) else MPLUS2 = 0.25D0*(MR + 1.D0)**2 end if if(ABS(MR) .GE. 1.D0) then MMIN2 = 0.5D0*(MR - ABS(MR)) else MMIN2 = -0.25D0*(MR - 1.D0)**2 end if if (ABS(MR) .GE. 1) then MMIN = 0.5D0*(MR - ABS(MR)) else MMIN = MMIN2*(1.D0 + B_AUSM*16.D0*MPLUS2) end if if (ABS(MR) .GE. 1) then PMIN = (0.5D0*(MR - ABS(MR)))/MR else PMIN = -MMIN2*(2.D0 + MR - A_AUSM*16.D0*MR*MPLUS2) end if Mkplus = wkplus*MPLUS + (1.D0 - wkplus)*0.5D0*(ML + ABS(ML)) Mkmin = wkmin*MMIN + (1.D0 - wkmin)* 0.5D0*(MR - ABS(MR)) Pkplus = PPLUS Pkmin = PMIN END