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