kill(all);

## tensioni a remoto

inserisco da subito i valori delle tensioni a remoto
in modo da non mantenerli inutilmente parametrici
per tutto il codice

sxx_ff : 1 $

syy_ff : 0 $

sxy_ff : 0 $

## cambio di coordinate da xy a rt per
le tensioni remote

da pagg. 8,9 Barber , ivi derivate dai circoli di Mohr

definisco le quantità ausiliarie

c : cos(t)$
s : sin(t)$

define(
    srr_ff(sxx,syy,sxy,t),
    sxx*c^2 + syy*s^2+2*sxy*s*c
);

define(
    srt_ff(sxx,syy,sxy,t),
    sxy*(c^2-s^2)+(syy-sxx)*s*c
);

define(
    stt_ff(sxx,syy,sxy,t),
    syy*c^2 + sxx*s^2-2*sxy*s*c
);

non servono più le quantità ausiliarie

kill(c,s)$

mostro le condizioni al contorno di far field, nel caso specifico

porto in rappresentazione di serie di Fourier , finita

trigreduce(
    [ 
        srr_ff(sxx_ff,syy_ff,sxy_ff,t) , 
        stt_ff(sxx_ff,syy_ff,sxy_ff,t) , 
        srt_ff(sxx_ff,syy_ff,sxy_ff,t) 
    ]);

## Funzioni di Airy per il dominio piano
in coordinate polari, e associate tensioni

inserisco i termini della soluzione secondo Michell che ritengo appropriati
al caso specifico

philist : [ 
    r^2 , 
    log(r) ,
    t, 
    r^(-2+2)*cos(2*t) , 
    r^2*cos(2*t) , 
    r^(-2)*cos(2*t) ,
    r^(-2+2)*sin(2*t) , 
    r^2*sin(2*t) , 
    r^(-2)*sin(2*t) 
];

## Definisco incognite e composizione lineare

definisco i fattori incogniti che scalano i singoli termini di philist
nella combinazione lineare

unks : makelist (
         A[i],
         i,
         1, 
         length(philist)
       );

definisco phi(r,t) per combinazione lineare

define(
    phi(r,t),
    sum(
        unks[i] * philist[i],
        i,
        1,
        length(philist)
    )
);

## Derivo le tensioni

inserisco le relazioni che derivano da phi le componenti di tensione
formule 8.10 e 8.11 p. 110 (124 pdf) del Barber

define(
    srr(r,t),
    1/r * diff( phi(r,t) , r , 1) + 1/r^2*diff( phi(r,t) , t , 2 )
);
define(
    stt(r,t),
    diff( phi(r,t) , r , 2 )
);
define(
    srt(r,t),
    1/r^2 * diff(phi(r,t), t,1) - 1/r * diff(phi(r,t),r,1,t,1)
);

## Procedo

Definisco le condizioni al contorno

eqns : [
    srr(1,t)=0,
    srt(1,t)=0,

    limit( srr(r,t) , r, infinity ) = 
                srr_ff(sxx_ff,syy_ff,sxy_ff,t),

    limit( stt(r,t) , r, infinity ) =
                stt_ff(sxx_ff,syy_ff,sxy_ff,t),

    limit( srt(r,t) , r, infinity ) =
                srt_ff(sxx_ff,syy_ff,sxy_ff,t)

];

tali 5 equazioni NON sono sufficienti a determinare i 9 coefficienti
incogniti, se non considero che devono valere PER OGNI t

impongo che le equazioni valgano per un t specifico

ev(eqns, t=0);

inpongo che la differenza tra parte destra dell'equazione e 
parte sinistra sia una costante in t

eqns;

definisco le equazioni nella forma residuo=0
o meglio, estraggo dalla lista di equazioni una lista di residui
da annullare affinchè le equazioni siano verificate

res_eqns : makelist(
    
    trigreduce ( lhs(eqns[i]) - rhs(eqns[i]) )

    ,i,1,length(eqns)
);

questi residui sono funzione lineare di sin(2*t) e cos(2*t)

tali residui devono essere nulli per ogni t,
anzi, no, per ogni valore di sin(2t) e cos(2t)

ossia, devono essere valide per uno specifico valore assegnato
a sin(2*t) e cos(2*t), ed essere invarianti in sin(2*t) e cos(2*t)

eqns_definitive : 
append(
              ev( res_eqns , t=0  )     ,
            diff( res_eqns , sin(2*t))  ,
            diff( res_eqns , cos(2*t)) 
);

append( [ a,b,c ] , [d,e,f] , [ g,h, i]);

diff (  [  f(x) , g(x) ] , x);

ho fatto fatica a inserire l' "=0" come condizione sul residuo a t=0
e sulle sue derivate in sin(2*t) e cos(2*t), poco male tanto
senza ulteriore indicazione, se tratto come equazione
un'espressione priva di "="

il maxima assume che l'utente voglia annullare l'espressione.

esempio:

linsolve ( a*x-b , x );

tento il linsolve su tutti i residui e le derivate degli stessi
incrocio le dita

linsolve( eqns_definitive , unks );

wow