00001 subroutine calc_omega_drot(vphiy,alphw,psiw,bvxdw,bvydw,omega,Jome,Jome_int)
00002 use phys_constant, only : long
00003 use def_matter_parameter
00004
00005 implicit none
00006 real(long), intent(in):: vphiy, alphw, psiw, bvxdw, bvydw
00007 real(long), intent(inout):: omega
00008 real(long), intent(out):: Jome, Jome_int
00009
00010
00011
00012 real(long) :: sgg, gg
00013 real(long) :: p4a2, ovyu, ov2, ovphi, term1, term2
00014 real(long) :: dJomedo, dterm1do, dterm2do
00015 real(long) :: omegaold, ddomega
00016 real(long) :: facfac, numero, error
00017
00018
00019
00020
00021 sgg = 0.0d0
00022 gg = 0.0d0
00023
00024 p4a2 = psiw**4/alphw**2
00025 numero = 1
00026 do
00027 Jome = A2DR*omega*((ome/omega)**index_DR - 1.0d0)
00028 ovyu = bvydw + omega*vphiy
00029
00030
00031 ov2 = ovyu**2
00032 ovphi = ovyu*vphiy
00033 term1 = 1.0d0 - p4a2*ov2
00034 term2 = p4a2*ovphi
00035
00036 dJomedo = - A2DR + A2DR*(ome/omega)**index_DR*dble(-index_DR+1)
00037 dterm1do = - p4a2*2.0d0*ovyu*vphiy
00038 dterm2do = p4a2*vphiy*vphiy
00039
00040 sgg = -(Jome*term1 - term2)
00041 gg = dJomedo*term1 + Jome*dterm1do - dterm2do
00042
00043 ddomega = sgg/gg
00044 facfac = dmin1(dble(numero)/5.0d0,1.0d0)
00045 omega = omega + ddomega*facfac
00046 error = dabs(ddomega/ome)
00047 numero = numero + 1
00048 if (numero>1000) then
00049 write(6,*)' numero = ', numero, ' error =',error
00050 end if
00051
00052 if (numero>1010) exit
00053 if (dabs(error)<1.0d-09) exit
00054
00055
00056
00057
00058
00059 end do
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 Jome = A2DR*omega*((ome/omega)**index_DR - 1.00d0)
00070 Jome_int = A2DR*ome**index_DR * omega**(2.00d0-index_DR)&
00071 & /(2.00d0-index_DR)&
00072 & -5.00d-1*A2DR*omega**2&
00073 & -index_DR*A2DR*ome**2/(4.00d0-2.00d0*index_DR)
00074
00075
00076 end subroutine calc_omega_drot
00077