function [ ampl, phi ] = r8_admp ( x )

%*****************************************************************************80
%
%% r8_admp(): modulus and phase of the derivative of the Airy function.
%
%  Description:
%
%    This function must only be called when X <= -1.0.
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    28 September 2011
%
%  Author:
%
%    Original FORTRAN77 version by Wayne Fullerton.
%    MATLAB version by John Burkardt.
%
%  Reference:
%
%    Wayne Fullerton,
%    Portable Special Function Routines,
%    in Portability of Numerical Software,
%    edited by Wayne Cowell,
%    Lecture Notes in Computer Science, Volume 57,
%    Springer 1977,
%    ISBN: 978-3-540-08446-4,
%    LC: QA297.W65.
%
%  Input:
%
%    real X, the argument.
%
%  Output:
%
%    real AMPL, PHI, the modulus and phase of the
%    derivative of the Airy function.
%
  persistent an20cs
  persistent an21cs
  persistent an22cs
  persistent aph0cs
  persistent aph1cs
  persistent aph2cs
  persistent nan20
  persistent nan21
  persistent nan22
  persistent naph0
  persistent naph1
  persistent naph2
  persistent pi34
  persistent xsml

  if ( isempty ( nan20 ) )

    an20cs = [ ...
        0.0126732217145738027154610751034240, ...
       -0.0005212847072615621184780942309478, ...
       -0.0000052672111140370429809074052969, ...
       -0.0000001628202185026483752632460680, ...
       -0.0000000090991442687371386325973075, ...
       -0.0000000007438647126242192890685403, ...
       -0.0000000000795494751591469486122822, ...
       -0.0000000000104050944288303742803960, ...
       -0.0000000000015932425598414551523990, ...
       -0.0000000000002770648272341913946674, ...
       -0.0000000000000535342629237606295104, ...
       -0.0000000000000113061541781728314051, ...
       -0.0000000000000025772190078943167788, ...
       -0.0000000000000006278033116032485076, ...
       -0.0000000000000001621295400189939757, ...
       -0.0000000000000000440992985240675353, ...
       -0.0000000000000000125655516553258972, ...
       -0.0000000000000000037336906988015204, ...
       -0.0000000000000000011524626926724671, ...
       -0.0000000000000000003683081499099144, ...
       -0.0000000000000000001215206965331797, ...
       -0.0000000000000000000412916177724016, ...
       -0.0000000000000000000144177364239347, ...
       -0.0000000000000000000051631842875864, ...
       -0.0000000000000000000018931242668250, ...
       -0.0000000000000000000007096054668569, ...
       -0.0000000000000000000002715406646904, ...
       -0.0000000000000000000001059486979400, ...
       -0.0000000000000000000000421030035685, ...
       -0.0000000000000000000000170233781664, ...
       -0.0000000000000000000000069966677028, ...
       -0.0000000000000000000000029206643813, ...
       -0.0000000000000000000000012373128203, ...
       -0.0000000000000000000000005315871095, ...
       -0.0000000000000000000000002314622618, ...
       -0.0000000000000000000000001020779922, ...
       -0.0000000000000000000000000455706227, ...
       -0.0000000000000000000000000205831071, ...
       -0.0000000000000000000000000094015189, ...
       -0.0000000000000000000000000043405874, ...
       -0.0000000000000000000000000020247792, ...
       -0.0000000000000000000000000009539214, ...
       -0.0000000000000000000000000004537234, ...
       -0.0000000000000000000000000002178016, ...
       -0.0000000000000000000000000001054823, ...
       -0.0000000000000000000000000000515242, ...
       -0.0000000000000000000000000000253763, ...
       -0.0000000000000000000000000000125983, ...
       -0.0000000000000000000000000000063030, ...
       -0.0000000000000000000000000000031771, ...
       -0.0000000000000000000000000000016131, ...
       -0.0000000000000000000000000000008248, ...
       -0.0000000000000000000000000000004246, ...
       -0.0000000000000000000000000000002200, ...
       -0.0000000000000000000000000000001147, ...
       -0.0000000000000000000000000000000602, ...
       -0.0000000000000000000000000000000318 ]';
    an21cs = [ ...
        0.0198313155263169394420342483165643, ...
       -0.0029376249067087533460593745594484, ...
       -0.0001136260695958195549872611137182, ...
       -0.0000100554451087156009750981645918, ...
       -0.0000013048787116563250421785598252, ...
       -0.0000002123881993150664830666079609, ...
       -0.0000000402270833384269040347850109, ...
       -0.0000000084996745953161799142201792, ...
       -0.0000000019514839426178614099532934, ...
       -0.0000000004783865343840384282992480, ...
       -0.0000000001236733992099450501137105, ...
       -0.0000000000334137486398754232219789, ...
       -0.0000000000093702823540766329897780, ...
       -0.0000000000027130128156139564687240, ...
       -0.0000000000008075953800583479535949, ...
       -0.0000000000002463214304700125252160, ...
       -0.0000000000000767655689109321564410, ...
       -0.0000000000000243882598807354919791, ...
       -0.0000000000000078831466358760308462, ...
       -0.0000000000000025882400995585864077, ...
       -0.0000000000000008619457862945690828, ...
       -0.0000000000000002907994739663128534, ...
       -0.0000000000000000992846796122890484, ...
       -0.0000000000000000342720229187774480, ...
       -0.0000000000000000119511048205515026, ...
       -0.0000000000000000042069729043678359, ...
       -0.0000000000000000014939697762818400, ...
       -0.0000000000000000005348981161589517, ...
       -0.0000000000000000001929877577826238, ...
       -0.0000000000000000000701313701018203, ...
       -0.0000000000000000000256585738509682, ...
       -0.0000000000000000000094475894562734, ...
       -0.0000000000000000000034996401941465, ...
       -0.0000000000000000000013037622466397, ...
       -0.0000000000000000000004883334163346, ...
       -0.0000000000000000000001838477586152, ...
       -0.0000000000000000000000695527324058, ...
       -0.0000000000000000000000264351910209, ...
       -0.0000000000000000000000100918094655, ...
       -0.0000000000000000000000038688924289, ...
       -0.0000000000000000000000014892036525, ...
       -0.0000000000000000000000005754342426, ...
       -0.0000000000000000000000002231725971, ...
       -0.0000000000000000000000000868607480, ...
       -0.0000000000000000000000000339220403, ...
       -0.0000000000000000000000000132910128, ...
       -0.0000000000000000000000000052239309, ...
       -0.0000000000000000000000000020594383, ...
       -0.0000000000000000000000000008142614, ...
       -0.0000000000000000000000000003228473, ...
       -0.0000000000000000000000000001283529, ...
       -0.0000000000000000000000000000511622, ...
       -0.0000000000000000000000000000204451, ...
       -0.0000000000000000000000000000081901, ...
       -0.0000000000000000000000000000032886, ...
       -0.0000000000000000000000000000013235, ...
       -0.0000000000000000000000000000005338, ...
       -0.0000000000000000000000000000002158, ...
       -0.0000000000000000000000000000000874, ...
       -0.0000000000000000000000000000000355 ]';
    an22cs = [ ...
        0.0537418629629794329091103360917783, ...
       -0.0126661435859883193466312085036450, ...
       -0.0011924334106593006840848916913681, ...
       -0.0002032327627275654552687155176363, ...
       -0.0000446468963075163979516164905945, ...
       -0.0000113359036053123490416997893086, ...
       -0.0000031641352378546107356671355827, ...
       -0.0000009446708886148939120888532442, ...
       -0.0000002966562236471765527900905456, ...
       -0.0000000969118892024367799908661433, ...
       -0.0000000326822538653274091533072559, ...
       -0.0000000113144618963583865900447294, ...
       -0.0000000040042691001741501738278050, ...
       -0.0000000014440333683907423778522199, ...
       -0.0000000005292853746152611585663541, ...
       -0.0000000001967763373707889528245726, ...
       -0.0000000000740800095755849858816731, ...
       -0.0000000000282016314294661982842740, ...
       -0.0000000000108440066463128331337590, ...
       -0.0000000000042074800682644236920617, ...
       -0.0000000000016459149670634819724739, ...
       -0.0000000000006486826705121018896077, ...
       -0.0000000000002574095003354105832300, ...
       -0.0000000000001027889029407822132143, ...
       -0.0000000000000412845827195222720128, ...
       -0.0000000000000166711029332862509726, ...
       -0.0000000000000067656696165608023403, ...
       -0.0000000000000027585448232693576823, ...
       -0.0000000000000011296397915297168938, ...
       -0.0000000000000004644848225457314333, ...
       -0.0000000000000001917198035033912928, ...
       -0.0000000000000000794197570111893530, ...
       -0.0000000000000000330116492300368930, ...
       -0.0000000000000000137658057726549714, ...
       -0.0000000000000000057578093720012791, ...
       -0.0000000000000000024152700858632017, ...
       -0.0000000000000000010159301700933666, ...
       -0.0000000000000000004284434955330055, ...
       -0.0000000000000000001811344052168016, ...
       -0.0000000000000000000767602045619422, ...
       -0.0000000000000000000326026346758614, ...
       -0.0000000000000000000138773806682627, ...
       -0.0000000000000000000059191627103729, ...
       -0.0000000000000000000025297256431944, ...
       -0.0000000000000000000010832077293819, ...
       -0.0000000000000000000004646674880404, ...
       -0.0000000000000000000001996797783865, ...
       -0.0000000000000000000000859524108705, ...
       -0.0000000000000000000000370584152073, ...
       -0.0000000000000000000000160027503479, ...
       -0.0000000000000000000000069208124999, ...
       -0.0000000000000000000000029974448994, ...
       -0.0000000000000000000000013000356362, ...
       -0.0000000000000000000000005646100942, ...
       -0.0000000000000000000000002455341103, ...
       -0.0000000000000000000000001069119686, ...
       -0.0000000000000000000000000466095090, ...
       -0.0000000000000000000000000203441579, ...
       -0.0000000000000000000000000088900866, ...
       -0.0000000000000000000000000038891813, ...
       -0.0000000000000000000000000017032637, ...
       -0.0000000000000000000000000007467295, ...
       -0.0000000000000000000000000003277097, ...
       -0.0000000000000000000000000001439618, ...
       -0.0000000000000000000000000000633031, ...
       -0.0000000000000000000000000000278620, ...
       -0.0000000000000000000000000000122743, ...
       -0.0000000000000000000000000000054121, ...
       -0.0000000000000000000000000000023884, ...
       -0.0000000000000000000000000000010549, ...
       -0.0000000000000000000000000000004663, ...
       -0.0000000000000000000000000000002063, ...
       -0.0000000000000000000000000000000913, ...
       -0.0000000000000000000000000000000405 ]';
    aph0cs = [ ...
       -0.0855849241130933256920124260179491, ...
        0.0011214378867065260735786722471124, ...
        0.0000042721029353664113951573742015, ...
        0.0000000817607381483243644018062323, ...
        0.0000000033907645000492724207816418, ...
        0.0000000002253264422619113939845276, ...
        0.0000000000206284209229015251256990, ...
        0.0000000000023858762828130887627258, ...
        0.0000000000003301618105886705480628, ...
        0.0000000000000527009648508328581123, ...
        0.0000000000000094555482203813492868, ...
        0.0000000000000018709426951344836908, ...
        0.0000000000000004023980041825392741, ...
        0.0000000000000000930192879258983167, ...
        0.0000000000000000229038635402379945, ...
        0.0000000000000000059634359822083386, ...
        0.0000000000000000016320279659403399, ...
        0.0000000000000000004671145658861339, ...
        0.0000000000000000001392334415363502, ...
        0.0000000000000000000430642670285155, ...
        0.0000000000000000000137781416318755, ...
        0.0000000000000000000045476710480396, ...
        0.0000000000000000000015448420203026, ...
        0.0000000000000000000005389770551212, ...
        0.0000000000000000000001927726737155, ...
        0.0000000000000000000000705659320166, ...
        0.0000000000000000000000263985084827, ...
        0.0000000000000000000000100791301805, ...
        0.0000000000000000000000039228928481, ...
        0.0000000000000000000000015547422955, ...
        0.0000000000000000000000006268306372, ...
        0.0000000000000000000000002568563962, ...
        0.0000000000000000000000001068858883, ...
        0.0000000000000000000000000451347253, ...
        0.0000000000000000000000000193267262, ...
        0.0000000000000000000000000083865369, ...
        0.0000000000000000000000000036857386, ...
        0.0000000000000000000000000016396202, ...
        0.0000000000000000000000000007379298, ...
        0.0000000000000000000000000003358392, ...
        0.0000000000000000000000000001544891, ...
        0.0000000000000000000000000000718013, ...
        0.0000000000000000000000000000337026, ...
        0.0000000000000000000000000000159710, ...
        0.0000000000000000000000000000076382, ...
        0.0000000000000000000000000000036855, ...
        0.0000000000000000000000000000017935, ...
        0.0000000000000000000000000000008800, ...
        0.0000000000000000000000000000004353, ...
        0.0000000000000000000000000000002170, ...
        0.0000000000000000000000000000001090, ...
        0.0000000000000000000000000000000551, ...
        0.0000000000000000000000000000000281 ]';
    aph1cs = [ ...
       -0.1024172908077571694021123321813917, ...
        0.0071697275146591248047211649144704, ...
        0.0001209959363122328589813856491397, ...
        0.0000073361512841219912080297845684, ...
        0.0000007535382954271607069982903869, ...
        0.0000001041478171741301926885109155, ...
        0.0000000174358728518545691858907606, ...
        0.0000000033399795033346451660184961, ...
        0.0000000007073075174363527083399508, ...
        0.0000000001619187515189773266792272, ...
        0.0000000000394539981881954889879668, ...
        0.0000000000101192281734227133292631, ...
        0.0000000000027092778259520332198030, ...
        0.0000000000007523806418422548885854, ...
        0.0000000000002156368733008966357328, ...
        0.0000000000000635282777126068410174, ...
        0.0000000000000191756972641501729345, ...
        0.0000000000000059143072446464891558, ...
        0.0000000000000018597128517275028357, ...
        0.0000000000000005950444923946103668, ...
        0.0000000000000001934229956430180252, ...
        0.0000000000000000637843021489504324, ...
        0.0000000000000000213127290087312393, ...
        0.0000000000000000072081380656728500, ...
        0.0000000000000000024652494144769247, ...
        0.0000000000000000008519110570266154, ...
        0.0000000000000000002972384468491170, ...
        0.0000000000000000001046426648811446, ...
        0.0000000000000000000371493036347327, ...
        0.0000000000000000000132923247793472, ...
        0.0000000000000000000047912837925909, ...
        0.0000000000000000000017390619859336, ...
        0.0000000000000000000006353585173501, ...
        0.0000000000000000000002335643614263, ...
        0.0000000000000000000000863643881606, ...
        0.0000000000000000000000321123006944, ...
        0.0000000000000000000000120031540983, ...
        0.0000000000000000000000045091488699, ...
        0.0000000000000000000000017020228580, ...
        0.0000000000000000000000006453744630, ...
        0.0000000000000000000000002457788564, ...
        0.0000000000000000000000000939897684, ...
        0.0000000000000000000000000360863150, ...
        0.0000000000000000000000000139077884, ...
        0.0000000000000000000000000053797184, ...
        0.0000000000000000000000000020882551, ...
        0.0000000000000000000000000008133371, ...
        0.0000000000000000000000000003178080, ...
        0.0000000000000000000000000001245700, ...
        0.0000000000000000000000000000489742, ...
        0.0000000000000000000000000000193099, ...
        0.0000000000000000000000000000076349, ...
        0.0000000000000000000000000000030269, ...
        0.0000000000000000000000000000012032, ...
        0.0000000000000000000000000000004795, ...
        0.0000000000000000000000000000001915, ...
        0.0000000000000000000000000000000767, ...
        0.0000000000000000000000000000000308 ]';
    aph2cs = [ ...
       -0.2057088719781465106973648665602125, ...
        0.0422196961357771921673114980369460, ...
        0.0020482560511207275042660577813334, ...
        0.0002607800735165005631187879922652, ...
        0.0000474824268004728875381750519293, ...
        0.0000105102756431611743473630026955, ...
        0.0000026353534014667945109314041983, ...
        0.0000007208824863499147299790783731, ...
        0.0000002103236664473352859749477082, ...
        0.0000000644975634555295598437362273, ...
        0.0000000205802377264368507978116888, ...
        0.0000000067836273920906428963513918, ...
        0.0000000022974015284009400168343792, ...
        0.0000000007961306765491187534883226, ...
        0.0000000002813860609741591719003632, ...
        0.0000000001011749056931973922841793, ...
        0.0000000000369306737952476559097060, ...
        0.0000000000136615066127098031778842, ...
        0.0000000000051142751416045045119388, ...
        0.0000000000019351688931706516247975, ...
        0.0000000000007393606916493224217271, ...
        0.0000000000002849792219222743597555, ...
        0.0000000000001107280782459648335733, ...
        0.0000000000000433412199370134633169, ...
        0.0000000000000170800825265670367471, ...
        0.0000000000000067733080195631114673, ...
        0.0000000000000027016904789262414108, ...
        0.0000000000000010834720751810782141, ...
        0.0000000000000004367060312970286167, ...
        0.0000000000000001768511738053366608, ...
        0.0000000000000000719359213093645717, ...
        0.0000000000000000293823610002933154, ...
        0.0000000000000000120482811525848357, ...
        0.0000000000000000049586659491091389, ...
        0.0000000000000000020479438315847217, ...
        0.0000000000000000008486019944410629, ...
        0.0000000000000000003527351765384506, ...
        0.0000000000000000001470563996804903, ...
        0.0000000000000000000614817826902188, ...
        0.0000000000000000000257737706565077, ...
        0.0000000000000000000108323903590042, ...
        0.0000000000000000000045638898024998, ...
        0.0000000000000000000019273635403662, ...
        0.0000000000000000000008157668569775, ...
        0.0000000000000000000003460202828346, ...
        0.0000000000000000000001470726482427, ...
        0.0000000000000000000000626356074088, ...
        0.0000000000000000000000267261292780, ...
        0.0000000000000000000000114246948763, ...
        0.0000000000000000000000048923460516, ...
        0.0000000000000000000000020985807810, ...
        0.0000000000000000000000009016618807, ...
        0.0000000000000000000000003880129464, ...
        0.0000000000000000000000001672282170, ...
        0.0000000000000000000000000721790800, ...
        0.0000000000000000000000000311982573, ...
        0.0000000000000000000000000135035015, ...
        0.0000000000000000000000000058524861, ...
        0.0000000000000000000000000025397686, ...
        0.0000000000000000000000000011035457, ...
        0.0000000000000000000000000004800788, ...
        0.0000000000000000000000000002090956, ...
        0.0000000000000000000000000000911743, ...
        0.0000000000000000000000000000397998, ...
        0.0000000000000000000000000000173923, ...
        0.0000000000000000000000000000076083, ...
        0.0000000000000000000000000000033316, ...
        0.0000000000000000000000000000014604, ...
        0.0000000000000000000000000000006407, ...
        0.0000000000000000000000000000002814, ...
        0.0000000000000000000000000000001237, ...
        0.0000000000000000000000000000000544 ]';

    eta = 0.1 * r8_mach ( 3 );
    nan20 = r8_inits ( an20cs, 57, eta );
    nan21 = r8_inits ( an21cs, 60, eta );
    nan22 = r8_inits ( an22cs, 74, eta );
    naph0 = r8_inits ( aph0cs, 53, eta );
    naph1 = r8_inits ( aph1cs, 58, eta );
    naph2 = r8_inits ( aph2cs, 72, eta );
    xsml = - ( 128.0 / r8_mach ( 3 ) )^0.3333;

  end

  if ( x < xsml )
    z = 1.0;
    ampl = 0.3125 + r8_csevl ( z, an20cs, nan20 );
    phi = - 0.625 + r8_csevl ( z, aph0cs, naph0 );
  elseif ( x < - 4.0 )
    z = 128.0 / x / x / x + 1.0;
    ampl = 0.3125 + r8_csevl ( z, an20cs, nan20 );
    phi = - 0.625 + r8_csevl ( z, aph0cs, naph0 );
  elseif ( x < - 2.0 )
    z = ( 128. / x / x / x + 9.0 ) / 7.0;
    ampl = 0.3125 + r8_csevl ( z, an21cs, nan21 );
    phi = - 0.625 + r8_csevl ( z, aph1cs, naph1 );
  elseif ( x <= - 1.0 )
    z = ( 16.0 / x / x / x + 9.0 ) / 7.0;
    ampl = 0.3125 + r8_csevl ( z, an22cs, nan22 );
    phi = - 0.625 + r8_csevl ( z, aph2cs, naph2 );
  else
    fprintf ( 1, '\n' );
    fprintf ( 1, 'R8_ADMP - Fatal error!\n' );
    fprintf ( 1, '  - 1.0 < X.\n' );
    error ( 'R8_ADMP - Fatal error!' )
  end

  sqrtx = sqrt ( - x );
  ampl = sqrt ( ampl * sqrtx );
  phi = 0.75 * pi - x * sqrtx * phi;

  return
end
